/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author nomes....
 */
class ListaPesquisaBinaria implements InterfaceExercicio5{
    
    Veiculo[] veiculo;
    
    @Override
    public void addAll(Veiculo[] vetor) {
        veiculo = new Veiculo[vetor.length];
        
        for (int i = 0; i < vetor.length; i++) {
            veiculo[i] = vetor[i];
        }
        
        this.quickSort(veiculo, 0, veiculo.length-1);
    }
    
    public static void quickSort(Veiculo[] v,int ini, int fim) {
        int meio;

        if (ini < fim) {
                meio = partition(v, ini, fim);
                quickSort(v, ini, meio);
                quickSort(v, meio + 1, fim);
        }
    }
 
    public static int partition(Veiculo[] v, int ini, int fim) {
        int topo, i;
        Veiculo pivo;
        pivo = v[ini];
        topo = ini;

        for (i = ini + 1; i <= fim; i++) {
                if (v[i].compareTo(pivo) < 0) {
                        v[topo] = v[i];
                        v[i] = v[topo + 1];
                        topo++; 
                }
        }
        v[topo] = pivo;
        return topo;
    }
    
    private void ordena(){
        int i,j;
        boolean trocou = false;
        Veiculo aux;
        
        for(i = veiculo.length-1; i > 1; i--){
            for(j = 0; j < i; j++){
                if( veiculo[j].compareTo(veiculo[j+1]) > 0 ){
                    aux = veiculo[j];
                    veiculo[j] = veiculo[j+1];
                    veiculo[j+1] = aux;
                    trocou = true;
                }
            }
            if(!trocou){
                break;
            }    
            trocou = false;
        }
    }

    @Override
    public Veiculo[] localizaMaisAntigo(){
        
        int menorAno = 99999;
        int j = 0;
        
        Veiculo[] veiculosMaisAntigos = new Veiculo[10000];
        
        for (int i = 0; i < veiculo.length; i++) {
            if (veiculo[i].getAno() < menorAno){
                menorAno = veiculo[i].getAno();
            }  
        }
        for (int i = 0; i < veiculo.length; i++) {
            if(veiculo[i].getAno() == menorAno){
                j++;
            }
        }
        
        Veiculo[] retorno = new Veiculo[j];
        
        j = 0;
        
        for (int i = 0; i < veiculo.length; i++) {
            if(veiculo[i].getAno() == menorAno){
                retorno[j] = veiculo[i];
                j++;
            }
        }
        
        return retorno;
    }

    @Override
    public Veiculo getMenorPlaca() {
        return veiculo[0];
    }

    @Override
    public Veiculo getMaiorPlaca() {
        return veiculo[99999];
    }

    @Override
    public Veiculo pesquisa(String placa) {
        int ini = 0;
        int fim = 0;
        int meio;
        
        while( ini < fim ){
            meio = (ini + fim)/2;
            
            if( placa.compareTo(veiculo[meio].getPlaca()) > 0 ){
                ini = meio + 1;
            }else{
                return veiculo[meio];
            }
            
        }
        return null;
    }
    
}
